home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Systemmonitors / MeMeter / MeMeter.c < prev    next >
C/C++ Source or Header  |  1996-09-26  |  5KB  |  163 lines

  1. /*
  2.  *    MeMeter.c - Copyright © 1992 by Devil's child.
  3.  *
  4.  *    Created:    07 Oct 1992  20:14:32
  5.  *    Modified:    18 Mar 1993  18:22:27
  6.  *
  7.  *    Make>> sc <file>.c
  8.  *    Make>> slink LIB:cs.o <file>.o SC SD ND BATCH NOICONS TO <file> LIB LIB:WBStartup.lib
  9.  */
  10.  
  11.  
  12. #define BASE_TIME    250000    /* Refresh mem 4 time per second */
  13.  
  14. #define GAD_TEXT    "   Free Mem   Max Used   Mem Used"
  15. #define GAD_WIDTH    (33 * TF->tf_XSize + 10)
  16. #define GAD_HEIGHT    (TF->tf_YSize + 4)
  17. #define GAD_LEFT    (5 * TF->tf_XSize + 10)
  18. #define V_SPACING    2
  19. #define H_MARGIN    4
  20.  
  21.  
  22. struct IntuitionBase *IntuitionBase;
  23. struct Library *GadToolsBase;
  24. struct GfxBase *GfxBase;
  25. char *GadText[] = { "Chip", "Fast", "Total" };
  26.  
  27. long __regargs Main(char *argv[], struct WBStartup *WBenchMsg)
  28. {
  29.     struct TextFont *TF;
  30.     struct RastPort *rp;
  31.     struct IntuiMessage *IMsg;
  32.     APTR VisualInfo = 0;
  33.     struct NewGadget ng;
  34.     struct TextAttr TextAttr;
  35.     struct timerequest TimeReq;
  36.     long InnerHeight, InnerWidth, i, TimerSignal, Signal, Avail[3];
  37.     struct Gadget *g, *GadTab[3], *GList = NULL;
  38.     struct Window *Win = NULL;
  39.     struct MsgPort *TimerPort = NULL;
  40.     long Snapshot[3] = { 0, 0, 0 }, MaxUsed[3] = { 0, 0, 0 };
  41.     BOOL Quit = FALSE, Dev = 1;
  42.  
  43.     IntuitionBase = (APTR)OpenLibrary("intuition.library", 0);
  44.     GfxBase = (APTR)OpenLibrary("graphics.library", 0);
  45.     GadToolsBase = OpenLibrary("gadtools.library", 0);
  46.  
  47.     if (!(TimerPort = CreateMsgPort()))
  48.         goto Exit;
  49.     TimerSignal = 1L << TimerPort->mp_SigBit;
  50.     if (Dev = OpenDevice(TIMERNAME, UNIT_VBLANK, (struct IORequest *)&TimeReq, 0L))
  51.         goto Exit;
  52.     TimeReq.tr_node.io_Message.mn_ReplyPort = TimerPort;
  53.     TimeReq.tr_node.io_Command = TR_ADDREQUEST;
  54.     TimeReq.tr_node.io_Flags = 0;
  55.     TimeReq.tr_node.io_Error = 0;
  56.     TimeReq.tr_time.tv_secs = 0;
  57.     TimeReq.tr_time.tv_micro = BASE_TIME;
  58.  
  59.     TF = GfxBase->DefaultFont;
  60.     InnerHeight = (V_SPACING + GAD_HEIGHT) * 4 + V_SPACING;
  61.     InnerWidth = GAD_WIDTH + GAD_LEFT + 2 * H_MARGIN;
  62.  
  63.     if (!(g = CreateContext(&GList)))
  64.         goto Exit;
  65.     Win = OpenWindowTags(NULL,    WA_Left, 32767,
  66.                                 WA_Top, 15,
  67.                                 WA_InnerWidth, InnerWidth,
  68.                                 WA_InnerHeight, InnerHeight,
  69.                                 WA_IDCMP, IDCMP_GADGETUP|IDCMP_CLOSEWINDOW,
  70.                                 WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE|WFLG_NOCAREREFRESH,
  71.                                 WA_Gadgets, GList,
  72.                                 WA_Title, "MeMeter V2.2",
  73.                                 WA_AutoAdjust, TRUE,
  74.                                 TAG_DONE);
  75.     if (!Win)
  76.         goto Exit;
  77.     rp = Win->RPort;
  78.     SetFont(rp, TF);
  79.     AskFont(rp, &TextAttr);        /* Get font as a TextAttr for Gadget Creation */
  80.     if (!(VisualInfo = GetVisualInfo(Win->WScreen, TAG_DONE)))
  81.         goto Exit;
  82.     ng.ng_LeftEdge = Win->BorderLeft + H_MARGIN + GAD_LEFT;
  83.     ng.ng_TopEdge = Win->BorderTop + V_SPACING;
  84.     ng.ng_Width = GAD_WIDTH;
  85.     ng.ng_Height = GAD_HEIGHT;
  86.     ng.ng_TextAttr = &TextAttr;
  87.     ng.ng_GadgetText = GAD_TEXT;
  88.     ng.ng_Flags = PLACETEXT_IN;
  89.     ng.ng_VisualInfo = VisualInfo;
  90.     if (!(g = CreateGadget(BUTTON_KIND, g, &ng, GT_Underscore, '_', TAG_DONE)))
  91.         goto Exit;
  92.     ng.ng_Flags = PLACETEXT_LEFT;
  93.     for( i=0 ; i<3 ; i++ ) {
  94.         ng.ng_TopEdge += GAD_HEIGHT + V_SPACING;
  95.         ng.ng_GadgetText = GadText[i];
  96.         if (!(g = CreateGadget(TEXT_KIND, g, &ng, GTTX_Border, TRUE, TAG_DONE)))
  97.             goto Exit;
  98.         GadTab[i] = g;
  99.     }
  100.     RefreshGList(GList, Win, NULL, -1L);
  101.     GT_RefreshWindow(Win, NULL);
  102.     SetDrMd(rp, JAM2);
  103.     SetAPen(rp, 1);
  104.     SetBPen(rp, 0);
  105.     SendIO((struct IORequest *)&TimeReq.tr_node);
  106.  
  107.     while(!Quit) {
  108.         /* Refresh Memory Meter */
  109.         Avail[0] = AvailMem(MEMF_CHIP);
  110.         Avail[1] = AvailMem(MEMF_FAST);
  111.         Avail[2] = Avail[0] + Avail[1];
  112.         for( i=0 ; i<3 ; i++ ) {
  113.             char Buf[50];
  114.             long diff;
  115.  
  116.             diff = Snapshot[i]-Avail[i];
  117.             if (MaxUsed[i] < diff)
  118.                 MaxUsed[i] = diff;
  119.             SPrintf(Buf, " %10ld %10ld %10ld", Avail[i], MaxUsed[i], diff);
  120.             Move(rp, ng.ng_LeftEdge + 5, Win->BorderTop + V_SPACING + (GAD_HEIGHT + V_SPACING) * (i+1) + TF->tf_Baseline + 2);
  121.             Text(rp, Buf, 33);
  122. //            GT_SetGadgetAttrs(GadTab[i], Win, NULL, GTTX_Text, Buf, TAG_DONE);    /* Blinks on refresh !! */
  123.         }
  124.         Signal = Wait((1L << Win->UserPort->mp_SigBit) | TimerSignal);
  125.         while (IMsg = (struct IntuiMessage *)GetMsg(Win->UserPort)) {
  126.             switch (IMsg->Class) {
  127.             case IDCMP_CLOSEWINDOW:    
  128.                 Quit = TRUE;
  129.                 break;
  130.             case IDCMP_GADGETUP:
  131.                 memcpy(Snapshot, Avail, 3 * sizeof(long));
  132.                 memset(MaxUsed, 0, 3 * sizeof(long));
  133.                 break;
  134.             }
  135.             ReplyMsg((struct Message *)IMsg);
  136.         }
  137.         if (Signal & TimerSignal) {
  138.             TimeReq.tr_time.tv_secs = 0;
  139.             TimeReq.tr_time.tv_micro = BASE_TIME;
  140.             SendIO((struct IORequest *)&TimeReq.tr_node);
  141.         }
  142.     }
  143.     AbortIO((struct IORequest *)&TimeReq);
  144.  
  145. Exit:
  146.     if (Win)
  147.         CloseWindow(Win);
  148.     if (VisualInfo)
  149.         FreeVisualInfo(VisualInfo);
  150.     if (GList)
  151.         FreeGadgets(GList);
  152.     if (Dev == 0)
  153.         CloseDevice((struct IORequest *)&TimeReq);
  154.     if (TimerPort)
  155.         DeleteMsgPort(TimerPort);
  156.     CloseLibrary(GadToolsBase);
  157.     CloseLibrary((APTR)GfxBase);
  158.     CloseLibrary(IntuitionBase);
  159.     return 0;
  160. }
  161.  
  162.  
  163.